import { Injectable } from '@angular/core';
import { _HttpClient } from '@delon/theme';
import { Observable } from 'rxjs';
import { SchoolDTO } from '../model/school-dto';
import { QueryOptions } from '../util/model/query-options';
import { ApiPagedData } from '../util/model/api-paged-data';
import { UserDTO } from '../model/user-dto';

@Injectable({
  providedIn: 'root',
})
export class SchoolService {
  /**
   * API的入口URL
   */
  private static URL = '/api/authority/schools';
  constructor(private http: _HttpClient) {}

  /**
   * 查询所有
   */
  getAll(): Observable<Array<SchoolDTO>> {
    return this.http.get<Array<SchoolDTO>>(`${SchoolService.URL}/all?_allow_anonymous=true`);
  }

  /**
   * 分页查询学校
   *
   * @param option 分页参数
   * @param name 学校名称
   */
  getOnePage(option: QueryOptions, name?: string): Observable<ApiPagedData<SchoolDTO>> {
    const params = {};
    Object.assign(params, option);
    Object.assign(params, name ? { name } : {});
    return this.http.get<ApiPagedData<SchoolDTO>>(SchoolService.URL, params);
  }

  /**
   * 删除学校
   *
   * @param id 学校id
   */
  deleteById(id: string): Observable<any> {
    return this.http.delete(`${SchoolService.URL}/${id}`);
  }

  /**
   * 根据ID查找学校
   *
   * @param id 学校id
   */
  findById(id: string): Observable<SchoolDTO> {
    return this.http.get<SchoolDTO>(`${SchoolService.URL}/${id}`);
  }

  /**
   * 修改学校
   *
   * @param item 新增信息
   * @param id 学校id
   */
  update(item: SchoolDTO, id: string): Observable<SchoolDTO> {
    return this.http.put<SchoolDTO>(`${SchoolService.URL}/${id}`, item);
  }

  /**
   * 创建学校管理员
   *
   * @param item 新增信息
   * @param id 学校id
   */
  createUser(item: UserDTO, id: string): Observable<UserDTO> {
    return this.http.put<UserDTO>(`${SchoolService.URL}/${id}/user`, item);
  }

  /**
   * 新建学校
   *
   * @param item 修改信息
   */
  create(item: SchoolDTO): Observable<SchoolDTO> {
    return this.http.post<SchoolDTO>(SchoolService.URL, item);
  }
}
